import router from '@/router/index'
import { useAppStore } from '@/stores/app'
import { notFoundRoute, mistakeRoute } from './constants'
// 引入进度条插件以及样式
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
NProgress.configure({
  easing: 'ease',
  speed: 900,
  showSpinner: false,
})

// 配置白名单页面
const whitelist = ['/login']

// 路由守卫
router.beforeEach(async (to, from, next) => {
  const store = useAppStore() // 放在外面pinia会报错
  const token = sessionStorage.getItem('token') // token要放在里面否则会有异步问题
  const userInfo = sessionStorage.getItem('userInfo')
  if (!whitelist.includes(to.path)) {
    if (!token) {
      // 没有token访问非白名单直接重定向登录页
      next('/login')
    } else {
      // 有token后用动态路由做权限管理
      if (store.isAddRoutes) {
        // 是否有动态添加 就是下面的代码是否走过一遍了 走过了就不用走了防止死循环
        next()
      } else {
        // 异步数据，要用awaite等待执行结果，否则直接走后面会报错
        const permissionRoutes = await store.getPermissionRoutes(
          userInfo as string // 有token了这里就不可能是null了 断言成字符串就可以
        )
        console.log(permissionRoutes, '权限路由')
        permissionRoutes.forEach((item: any) => {
          router.addRoute(item) // 逐条添加路由记录
        })
        // 最后动态添加404页面
        router.addRoute(notFoundRoute)
        router.addRoute(mistakeRoute)
        store.isAddRoutes = true
        next(to.fullPath)
      }
    }
  } else {
    next()
  }
  NProgress.start() // 开启进度条
})

router.afterEach((to) => {
  document.title = to.meta.title as string // 设置浏览器tab选项卡标题
  NProgress.done() // 关闭进度条
})
